package com.hilinos.gb.gb28181.cmd;

import java.util.List;

import com.hilinos.gb.gb28181.repository.mysql.mapper.po.Device;

public interface ICommand {
    /**
     * 查询设备信息
     *
     * @param deviceVo 视频设备
     */
    boolean deviceInfoQuery(Device deviceVo);

    /**
     * 查询目录列表
     *
     * @param deviceVo 视频设备
     */
    boolean catalogQuery(Device deviceVo);

    /**
     * 查询录像信息
     *
     * @param deviceVo  视频设备
     * @param startTime 开始时间,格式要求：yyyy-MM-dd HH:mm:ss
     * @param endTime   结束时间,格式要求：yyyy-MM-dd HH:mm:ss
     */
    boolean recordInfoQuery(Device deviceVo, String channelId, String startTime, String endTime);

    /**
     * 请求预览视频流
     *
     * @param deviceVo  视频设备
     * @param channelId 预览通道
     */
    String playStreamCmd(Device deviceVo, String channelId);

    /**
     * 请求回放视频流
     *
     * @param deviceVo  视频设备
     * @param channelId 预览通道
     * @param startTime 开始时间,格式要求：yyyy-MM-dd HH:mm:ss
     * @param endTime   结束时间,格式要求：yyyy-MM-dd HH:mm:ss
     */
    String playbackStreamCmd(Device deviceVo, String channelId, String startTime, String endTime);

    /**
     * 视频流停止
     *
     * @param ssrc ssrc
     */
    void streamByeCmd(String ssrc);

    /**
     * 处理异常的在线设备
     * 比如断网造成的设备离线，但是服务端不知道，就需要定期轮询
     * 这算是个补偿机制
     *
     * @param onlineDevices 在线设备
     * @return 返回需要离线的设备id列表
     */
    List<String> dealErrorOnlineDevice(List<Device> onlineDevices);
}
